/*
 * app.lockenabler2.Settings.java
 * 
 * Copyright (C) 2010-11 kfv 
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; version 3 of the License.
 * 
 */

package app.lockenabler2;

import android.app.Activity;
import android.appwidget.AppWidgetManager;
import android.content.ComponentName;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.util.TypedValue;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.Gallery;
import android.widget.ImageButton;
import android.widget.RemoteViews;
import android.widget.SeekBar;
import android.widget.TextView;

public class Settings extends Activity {
    private Gallery mGallery;
    private Preferences mCustomIconPref;
    private static int SELECT_IMAGE = 999;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.settings);

        final TextView mTimeoutView;
        final SeekBar mTimeoutSeekbar;
        final CheckBox mExitOnTouchCheck;
        final CheckBox mLabelCheck;

        final Preferences mTimeOutPref = new Preferences("Lock_Screen_Time_Out", this);
        final Preferences mIconPositionPref = new Preferences("Widget_Icon", this);
        final Preferences mExitOnTouchPref = new Preferences("Exit_On_Touch", this);
        final Preferences mShowLabelPref = new Preferences("Show_Label", this);

        // Устанавливаем галерею
        mGallery = (Gallery)findViewById(R.id.icons);
        //Конвертируем пиксели в dip
        float mPx = TypedValue.applyDimension(
                TypedValue.COMPLEX_UNIT_DIP, 48, getResources().getDisplayMetrics());
        mGallery.setAdapter(new ImageAdapter(this, (int)mPx)); // Устанавливаем адаптер обработки
        mGallery.setSelection(mIconPositionPref.getValue(4)); // установить позицию

        // Устанавливаем кастомную иконку из настроек
        mCustomIconPref = new Preferences("Custom_Icon", this);
        Uri mCustomIcon = Uri.parse(mCustomIconPref.getValue(
                "android.resource://app.lockenabler2/"+R.drawable.icon_gallery));
        ImageAdapter.ImageIds[10]=mCustomIcon;

        // Устанавливаем таймаут
        mTimeoutView = (TextView)findViewById(R.id.viewtimeout);
        int mTimeOut = mTimeOutPref.getValue(2);
        mTimeoutView.setText(""+(mTimeOut+1)+" "+getString(R.string.seconds));

        // Устанавливаем сикбар таймаута
        mTimeoutSeekbar = (SeekBar)findViewById(R.id.timeout);
        mTimeoutSeekbar.setProgress(mTimeOut);

        // Загружем настройки скрытия галочки "Выход при нажатии" при нулевом
        mExitOnTouchCheck = (CheckBox) findViewById(R.id.touchexit);
        if (mTimeOut == 0) {
            mExitOnTouchCheck.setEnabled(false);
            mExitOnTouchCheck.setChecked(false);
        } else {
            mExitOnTouchCheck.setEnabled(true);
        }

        // Загружаем настройки галочки "Показывать подпись"
        mLabelCheck = (CheckBox)findViewById(R.id.label);
        boolean mShowLabel = mShowLabelPref.getValue(true);
        if (mShowLabel) {
            mLabelCheck.setChecked(true);
        } else {
            mLabelCheck.setChecked(false);
        }

        // Загружем настройки  галочки "Выход при нажатии"
        boolean mExitOnTouch = mExitOnTouchPref.getValue(false);
        if (mExitOnTouch) {
            mExitOnTouchCheck.setChecked(true);
        } else {
            mExitOnTouchCheck.setChecked(false);
        }

        // Обрабатываем клик по одинадцатой иконке галереи
        mGallery.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
                if (position == 10) {
                    startActivityForResult(new Intent(
                            Intent.ACTION_PICK,
                            android.provider.MediaStore.Images.Media.INTERNAL_CONTENT_URI),
                            SELECT_IMAGE);
                }
            }
        });

        // Обрабатываем перемещение сикбара таймаута
        mTimeoutSeekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener(){
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser){
                mTimeoutView.setText(""+(progress+1)+" "+getString(R.string.seconds));
                if (progress == 0) {
                    mExitOnTouchCheck.setEnabled(false);
                    mExitOnTouchCheck.setChecked(false);
                } else {
                    mExitOnTouchCheck.setEnabled(true);
                }
            }
            public void onStartTrackingTouch(SeekBar seekBar) {}
            public void onStopTrackingTouch(SeekBar seekBar) {}
        });

        // Обрабатываем кнопку сохранить
        Button mSaveButton = (Button) findViewById(R.id.savesettings);
        mSaveButton.setOnClickListener(new View.OnClickListener() {
            public void onClick(View arg0) {
                // Сохраняем позицию иконки
                int icon = mGallery.getSelectedItemPosition();
                mIconPositionPref.setValue(icon);

                // Сохраняем таймаут
                int timeout = mTimeoutSeekbar.getProgress();
                mTimeOutPref.setValue(timeout);

                // Сохраняем галочку "Выход при нажатии"
                if (mExitOnTouchCheck.isChecked()) {
                    mExitOnTouchPref.setValue(true);
                } else {
                    mExitOnTouchPref.setValue(false);
                }

                // Сохраняем галочку "Отображать подпись"
                if (mLabelCheck.isChecked()) {
                    mShowLabelPref.setValue(true);
                } else {
                    mShowLabelPref.setValue(false);
                }

                // Обновляем виджет
                RemoteViews mUpdateViews = Widget.UpdateService.buildUpdate(Settings.this);
                ComponentName mWidget = new ComponentName(Settings.this, Widget.class); 
                AppWidgetManager mManager = AppWidgetManager.getInstance(Settings.this); 
                mManager.updateAppWidget(mWidget, mUpdateViews);

                // Добавить виджет
                Intent intent = getIntent();
                Bundle extras = intent.getExtras();
                int mAppWidgetId = AppWidgetManager.INVALID_APPWIDGET_ID;
                if (extras != null) {
                    mAppWidgetId = extras.getInt(
                            AppWidgetManager.EXTRA_APPWIDGET_ID, 
                            AppWidgetManager.INVALID_APPWIDGET_ID);
                }

                Intent resultValue = new Intent();
                resultValue.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, mAppWidgetId);
                setResult(RESULT_OK, resultValue);

                finish();
                return;
            }
        });

        // Кнопка кошачьей помощи
        ImageButton mHelpButton = (ImageButton) findViewById(R.id.help_button);
        mHelpButton.setOnClickListener(new View.OnClickListener() {
            public void onClick(View arg0) {
                Intent help = new Intent(Settings.this, Help.class);
                startActivity(help);
            }
        });
    }

    // Обработка выбора кастомной иконки
    @Override
    protected final void onActivityResult(
            final int requestCode, final int resultCode, final Intent i) {
        super.onActivityResult(requestCode, resultCode, i);
        if(requestCode == SELECT_IMAGE){
            if (resultCode == Activity.RESULT_OK) {
                Uri mCustomImageUri = i.getData();
                mCustomIconPref.setValue(mCustomImageUri.toString());
                ImageAdapter.ImageIds[10]=mCustomImageUri; // Установить иконку
                ((BaseAdapter) mGallery.getAdapter()).notifyDataSetChanged(); // Обновить галерею
            }
        }
    }
}
